﻿using System;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Collections.Generic;
//using System.Linq;
//using System.Web;

namespace GKS.TBMS.DataLayer {
    public class UserRoleTeamMetadata {
        [DisplayName("User ID")]
        [ReadOnly(isReadOnly: true)]
        public Guid UserId { get; set; }

        [DisplayName("First name")]
        [StringLength(50)]
        [Description("The first name of the user.")]
        public string FirstName { get; set; }

        [DisplayName("Middle name")]
        [StringLength(50)]
        [Description("The middle name of the user.")]
        public string MiddleName { get; set; }

        [DisplayName("Last name")]
        [StringLength(50)]
        [Description("The last name of the user.")]
        [Required(AllowEmptyStrings = false, ErrorMessage = "This field is required")]
        public string LastName { get; set; }

        [StringLength(50)]
        [Description("The username of the user.")]
        [Required(AllowEmptyStrings = false, ErrorMessage = "This field is required")]
        public string Username { get; set; }

        [DisplayName("Role ID")]
        [Description("The ID of the role associated to the user.")]
        public System.Guid RoleId { get; set; }

        [DisplayName("Role name")]
        [Description("The name of the role associated to the user.")]
        [StringLength(50)]
        public string RoleName { get; set; }

        [DisplayName("Role description")]
        [Description("The description of the role associated to the user.")]
        [StringLength(4000)]
        public string RoleDescription { get; set; }

        [DisplayName("Team ID")]
        [Description("The ID of the team associated to the user.")]
        public System.Guid TeamId { get; set; }

        [DisplayName("Team Name")]
        [Description("The name of the team associated to the user.")]
        [StringLength(50)]
        public string TeamName { get; set; }

        [DisplayName("Team description")]
        [Description("The description of the team associated to the user.")]
        [StringLength(4000)]
        public string TeamDescription { get; set; }
    }

    public class UserMetadata {
        [DisplayName("User ID")]
        [ReadOnly(isReadOnly: true)]
        [Description("The ID of the user.")]
        public System.Guid Id { get; set; }

        [DisplayName("First name")]
        [StringLength(50)]
        [Description("The first name of the user.")]
        public string FirstName { get; set; }

        [DisplayName("Middle name")]
        [StringLength(50)]
        [Description("The middle name of the user.")]
        public string MiddleName { get; set; }

        [DisplayName("Last name")]
        [StringLength(50)]
        [Description("The last name of the user.")]
        public string LastName { get; set; }

        [DisplayName("Username")]
        [StringLength(50)]
        [Description("The username of the user.")]
        public string Username { get; set; }

        [DisplayName("Password")]
        [StringLength(50)]
        [Description("The password of the user.")]
        [ReadOnly(isReadOnly: true)]
        [DataType(DataType.Password)]
        public string Password { get; set; }

        [DisplayName("Created in")]
        [Description("The time when the user was created.")]
        [DataType(DataType.DateTime)]
        [ReadOnly(isReadOnly: true)]
        public System.DateTime CreatedIn { get; set; }

        [DisplayName("Created by")]
        [Description("The ID of the user who created this user.")]
        [ReadOnly(isReadOnly: true)]
        public Nullable<System.Guid> CreatedBy { get; set; }

        [DisplayName("Last update")]
        [Description("The time when the last update was made.")]
        [DataType(DataType.DateTime)]
        [ReadOnly(isReadOnly: true)]
        public System.DateTime LastUpdate { get; set; }

        [DisplayName("Updated by")]
        [Description("The ID of the user who did the last update of this record.")]
        [ReadOnly(isReadOnly: true)]
        public Nullable<System.Guid> UpdatedBy { get; set; }

        [DisplayName("Owner")]
        [Description("The ID of the owner of this record.")]
        public Nullable<System.Guid> Owner { get; set; }


        [DisplayName("Actions")]
        [Description("The actions that this user can do.")]
        public virtual ICollection<Action> Actions { get; set; }

        [DisplayName("Actions 1")]
        [Description("")]
        public virtual ICollection<Action> Actions1 { get; set; }

        [DisplayName("Actions 2")]
        [Description("")]
        public virtual ICollection<Action> Actions2 { get; set; }

        [DisplayName("Applications")]
        [Description("The applications in which this user can do any action.")]
        public virtual ICollection<Application> Applications { get; set; }

        [DisplayName("Applications 1")]
        [Description("")]
        public virtual ICollection<Application> Applications1 { get; set; }

        [DisplayName("Applications 2")]
        [Description("")]
        public virtual ICollection<Application> Applications2 { get; set; }

        [DisplayName("Applications 3")]
        [Description("")]
        public virtual ICollection<Application> Applications3 { get; set; }

        [DisplayName("Application's Actions")]
        [Description("The action that this user can do in a certain application")]
        public virtual ICollection<ApplicationAction> ApplicationActions { get; set; }

        [DisplayName("Application's Actions 1")]
        [Description("")]
        public virtual ICollection<ApplicationAction> ApplicationActions1 { get; set; }

        [DisplayName("Application's Actions 2")]
        [Description("")]
        public virtual ICollection<ApplicationAction> ApplicationActions2 { get; set; }

        [DisplayName("Application Action Roles")]
        [Description("")]
        public virtual ICollection<ApplicationActionRole> ApplicationActionRoles { get; set; }

        [DisplayName("Application Action Roles 1")]
        [Description("")]
        public virtual ICollection<ApplicationActionRole> ApplicationActionRoles1 { get; set; }

        [DisplayName("Application Action Roles 2")]
        [Description("")]
        public virtual ICollection<ApplicationActionRole> ApplicationActionRoles2 { get; set; }

        [DisplayName("Application Action Teams")]
        [Description("")]
        public virtual ICollection<ApplicationActionTeam> ApplicationActionTeams { get; set; }

        [DisplayName("Application Action Teams 1")]
        [Description("")]
        public virtual ICollection<ApplicationActionTeam> ApplicationActionTeams1 { get; set; }

        [DisplayName("Application Action Teams 2")]
        [Description("")]
        public virtual ICollection<ApplicationActionTeam> ApplicationActionTeams2 { get; set; }

        [DisplayName("Application Action Users")]
        [Description("")]
        public virtual ICollection<ApplicationActionUser> ApplicationActionUsers { get; set; }

        [DisplayName("Application Action Users 1")]
        [Description("")]
        public virtual ICollection<ApplicationActionUser> ApplicationActionUsers1 { get; set; }

        [DisplayName("Application Action Users 2")]
        [Description("")]
        public virtual ICollection<ApplicationActionUser> ApplicationActionUsers2 { get; set; }

        [DisplayName("Application Action Users 3")]
        [Description("")]
        public virtual ICollection<ApplicationActionUser> ApplicationActionUsers3 { get; set; }

        [DisplayName("Objects")]
        [Description("The objects to which the user is connected")]
        public virtual ICollection<Object> Objects { get; set; }

        [DisplayName("Objects 1")]
        [Description("")]
        public virtual ICollection<Object> Objects1 { get; set; }

        [DisplayName("Objects 2")]
        [Description("")]
        public virtual ICollection<Object> Objects2 { get; set; }

        [DisplayName("Object Actions")]
        [Description("")]
        public virtual ICollection<ObjectAction> ObjectActions { get; set; }

        [DisplayName("Object Actions 1")]
        [Description("")]
        public virtual ICollection<ObjectAction> ObjectActions1 { get; set; }

        [DisplayName("Object Actions 2")]
        [Description("")]
        public virtual ICollection<ObjectAction> ObjectActions2 { get; set; }

        [DisplayName("Object Action Roles")]
        [Description("")]
        public virtual ICollection<ObjectActionRole> ObjectActionRoles { get; set; }

        [DisplayName("Object Action Roles 1")]
        [Description("")]
        public virtual ICollection<ObjectActionRole> ObjectActionRoles1 { get; set; }

        [DisplayName("Object Action Roles 2")]
        [Description("")]
        public virtual ICollection<ObjectActionRole> ObjectActionRoles2 { get; set; }

        [DisplayName("Object Action Teams")]
        [Description("")]
        public virtual ICollection<ObjectActionTeam> ObjectActionTeams { get; set; }

        [DisplayName("Object Action Teams 1")]
        [Description("")]
        public virtual ICollection<ObjectActionTeam> ObjectActionTeams1 { get; set; }

        [DisplayName("Object Action Teams 2")]
        [Description("")]
        public virtual ICollection<ObjectActionTeam> ObjectActionTeams2 { get; set; }

        [DisplayName("Object Action Users")]
        [Description("")]
        public virtual ICollection<ObjectActionUser> ObjectActionUsers { get; set; }

        [DisplayName("Object Action Users 1")]
        [Description("")]
        public virtual ICollection<ObjectActionUser> ObjectActionUsers1 { get; set; }

        [DisplayName("Object Action Users 2")]
        [Description("")]
        public virtual ICollection<ObjectActionUser> ObjectActionUsers2 { get; set; }

        [DisplayName("Object Action Users 3")]
        [Description("")]
        public virtual ICollection<ObjectActionUser> ObjectActionUsers3 { get; set; }

        [DisplayName("Object Types")]
        [Description("")]
        public virtual ICollection<ObjectType> ObjectTypes { get; set; }

        [DisplayName("Object Types 1")]
        [Description("")]
        public virtual ICollection<ObjectType> ObjectTypes1 { get; set; }

        [DisplayName("Object Types 2")]
        [Description("")]
        public virtual ICollection<ObjectType> ObjectTypes2 { get; set; }

        [DisplayName("Roles")]
        [Description("")]
        public virtual ICollection<Role> Roles { get; set; }

        [DisplayName("Roles")]
        [Description("")]
        public virtual ICollection<Role> Roles1 { get; set; }

        [DisplayName("Teams")]
        [Description("")]
        public virtual ICollection<Team> Teams { get; set; }

        [DisplayName("Teams 1")]
        [Description("")]
        public virtual ICollection<Team> Teams1 { get; set; }

        [DisplayName("Teams 2")]
        [Description("")]
        public virtual ICollection<Team> Teams2 { get; set; }

        [DisplayName("Team Members")]
        [Description("")]
        public virtual ICollection<TeamMember> TeamMembers { get; set; }

        [DisplayName("Team Members 1")]
        [Description("")]
        public virtual ICollection<TeamMember> TeamMembers1 { get; set; }

        [DisplayName("Type Actions")]
        [Description("")]
        public virtual ICollection<TypeAction> TypeActions { get; set; }

        [DisplayName("Type Action Roles")]
        [Description("")]
        public virtual ICollection<TypeActionRole> TypeActionRoles { get; set; }

        [DisplayName("Type Action Users")]
        [Description("")]
        public virtual ICollection<TypeActionUser> TypeActionUsers { get; set; }

        [DisplayName("Type Action Users 1")]
        [Description("")]
        public virtual ICollection<TypeActionUser> TypeActionUsers1 { get; set; }

        [DisplayName("Type Action Users 2")]
        [Description("")]
        public virtual ICollection<TypeActionUser> TypeActionUsers2 { get; set; }

        [DisplayName("Type Action Users 3")]
        [Description("")]
        public virtual ICollection<TypeActionUser> TypeActionUsers3 { get; set; }

        [DisplayName("User 1")]
        [Description("")]
        public virtual ICollection<User> User1 { get; set; }

        [DisplayName("User 2")]
        [Description("")]
        public virtual User User2 { get; set; }

        [DisplayName("User 11")]
        [Description("")]
        public virtual ICollection<User> User11 { get; set; }

        [DisplayName("User 3")]
        [Description("")]
        public virtual User User3 { get; set; }

        [DisplayName("User 12")]
        [Description("")]
        public virtual ICollection<User> User12 { get; set; }

        [DisplayName("User 4")]
        [Description("")]
        public virtual User User4 { get; set; }

        [DisplayName("User Roles")]
        [Description("")]
        public virtual ICollection<UserRole> UserRoles { get; set; }

        [DisplayName("User Roles 1")]
        [Description("")]
        public virtual ICollection<UserRole> UserRoles1 { get; set; }
    }
}
